{"componentChunkName":"component---src-templates-blog-post-js","path":"/TypeScript/타입정의하기_<enum>/","result":{"data":{"site":{"siteMetadata":{"title":"JULog","author":"[Ju Chan Hwang]","siteUrl":"https://julog.netlify.app","comment":{"disqusShortName":"","utterances":"JuChanHwang/gatsby-starter-bee"},"sponsor":{"buyMeACoffeeId":"jbee"}}},"markdownRemark":{"id":"eccf90ca-6b92-5d31-bb21-5804d0a4ba8e","excerpt":"void: 아무것도 반환하지 않고 종료되는 함수의 반환 타입 never: 항상 예외가 발생해서 비정상적으로 종료되거나 무한루프 때문에 종료되지 않는 함수의 반환 타입 type: type 키워드를 이용해서 타입에 별칭을 줄 수 있다. enum 자바스크립트에는 없고 타입스크립트에만 존재하는 타입. 안의 원소를 타입 뿐만 아니라 값으로도 사용할 수 있다. enum의 첫 번째 원소에 값을 할당하지 않으면 자동으로 0이 할당된다. enum…","html":"<ul>\n<li>void: 아무것도 반환하지 않고 종료되는 함수의 반환 타입</li>\n<li>never: 항상 예외가 발생해서 비정상적으로 종료되거나 무한루프 때문에 종료되지 않는 함수의 반환 타입</li>\n<li>type: type 키워드를 이용해서 타입에 별칭을 줄 수 있다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">type</span> <span class=\"token class-name\">Width</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">number</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> width <span class=\"token operator\">=</span> Width<span class=\"token punctuation\">;</span>\nwidth <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\nwidth <span class=\"token operator\">=</span> <span class=\"token string\">'100px'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<h3 id=\"enum\" style=\"position:relative;\"><a href=\"#enum\" aria-label=\"enum permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>enum</h3>\n<p>자바스크립트에는 없고 타입스크립트에만 존재하는 타입. 안의 원소를 타입 뿐만 아니라 값으로도 사용할 수 있다.</p>\n<p>enum의 첫 번째 원소에 값을 할당하지 않으면 자동으로 0이 할당된다. enum의 각 원소에는 숫자 또는 문자열을 할당할 수 있는데 명시적으로 값을 입력하지 않으면 이전 원소에서 1만큼 증가한 값이 할당된다. 따라서 Orange는 5에서 1만큼 큰 6이 할당될 것이다.</p>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">enum</span> Fruit <span class=\"token punctuation\">{</span>\n  Apple<span class=\"token punctuation\">,</span>\n  Banana <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span>\n  Orange\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> v1<span class=\"token operator\">:</span> Fruit<span class=\"token punctuation\">.</span>Apple<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> v2<span class=\"token operator\">:</span> Fruit<span class=\"token punctuation\">.</span>Apple <span class=\"token operator\">|</span> Fruit<span class=\"token punctuation\">.</span>Banan <span class=\"token operator\">=</span> Fruit<span class=\"token punctuation\">.</span>Banana<span class=\"token punctuation\">;</span>\n\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>Fruit<span class=\"token punctuation\">.</span>Apple<span class=\"token punctuation\">,</span> Fruit<span class=\"token punctuation\">.</span>Banana<span class=\"token punctuation\">,</span> Fruit<span class=\"token punctuation\">.</span>Orange<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 0 5 6</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>Fruit<span class=\"token punctuation\">.</span>Banana<span class=\"token punctuation\">,</span> Fruit<span class=\"token punctuation\">[</span><span class=\"token string\">'Banana'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> Fruit<span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 5 5 Banana</span></code></pre></div>\n<blockquote>\n<p>컴파일 결과</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">var</span> Fruit<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">(</span><span class=\"token function\">funtion</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">Fruit</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  Fruit<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>Fruit<span class=\"token punctuation\">[</span><span class=\"token string\">'Apple'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'Apple'</span><span class=\"token punctuation\">;</span>\n  Fruit<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>Fruit<span class=\"token punctuation\">[</span><span class=\"token string\">'Banana'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'Banana'</span><span class=\"token punctuation\">;</span>\n  Fruit<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>Fruit<span class=\"token punctuation\">[</span><span class=\"token string\">'Orange'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">6</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'Orange'</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>Fruit <span class=\"token operator\">||</span> Fruit <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Fruit라는 변수를 선언해서 객체를 할당하고, 값을 넣고 있다.</p>\n<br>\n<p>enum 아이템의 값은 숫자 뿐만 아니라 문자열을 입력할 수 있다.\t</p>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">enum</span> Language <span class=\"token punctuation\">{</span>\n  Korean <span class=\"token operator\">=</span> <span class=\"token string\">'ko'</span><span class=\"token punctuation\">;</span>\n  English <span class=\"token operator\">=</span> <span class=\"token string\">'en'</span><span class=\"token punctuation\">;</span>\n  Japanese <span class=\"token operator\">=</span> <span class=\"token string\">'jp'</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n\n<span class=\"token comment\">// 컴파일</span>\n\n<span class=\"token keyword\">var</span> Language<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span>Language<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  Language<span class=\"token punctuation\">[</span><span class=\"token string\">'Korean'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'ko'</span><span class=\"token punctuation\">;</span>\n  Language<span class=\"token punctuation\">[</span><span class=\"token string\">'English'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'en'</span><span class=\"token punctuation\">;</span>\n  Language<span class=\"token punctuation\">[</span><span class=\"token string\">'Japanese'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'jp'</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>Language <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span>Language <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>enum의 원소에 문자열을 할당하는 경우에는 단방향으로 맵핑 된다.</p>\n<h3 id=\"enum을-사용해서-유틸리티-함수-구현\" style=\"position:relative;\"><a href=\"#enum%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C-%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0-%ED%95%A8%EC%88%98-%EA%B5%AC%ED%98%84\" aria-label=\"enum을 사용해서 유틸리티 함수 구현 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>enum을 사용해서 유틸리티 함수 구현</h3>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">function</span> <span class=\"token function\">getIsValidEnumValue</span><span class=\"token punctuation\">(</span>enumObject<span class=\"token operator\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">,</span> value<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">keys</span><span class=\"token punctuation\">(</span>enumObject<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>key <span class=\"token operator\">=></span> <span class=\"token function\">isNaN</span><span class=\"token punctuation\">(</span><span class=\"token function\">Number</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">some</span><span class=\"token punctuation\">(</span>key <span class=\"token operator\">=></span> enumObject<span class=\"token punctuation\">[</span>key<span class=\"token punctuation\">]</span> <span class=\"token operator\">===</span> value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>이 함수는 어떤 enum 객체에 특정 value가 있는지 검사하는 함수이다. 먼저, enum 객체에서 모든 키를 뽑아낸 다음 마지막에 enum 객체 안에 입력된 value가 있는지 검사하고 있다. 중간에 filter()를 하는 이유는 <strong>양방향 맵핑</strong> 때문이다.</p>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">enum</span> Some <span class=\"token punctuation\">{</span>\n  key1 <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Some['key1'] = 1;</span>\n<span class=\"token comment\">// Some[1] = 'key1';</span></code></pre></div>\n<p>이렇듯 양방향으로 맵핑된다. 따라서 value에 1이 입력 됐을 때 true가 되고, value의 key1이 입력됐을 때는 false가 된다.</p>\n<br>\n<p>enum을 사용하면 컴파일 후에도 enum 객체가 남아있기 때문에 번들 파일의 크기가 불필요하게 커질 수 있다. enum 객체에 접근하지 않는다면, 컴파일 후에 객체로 남겨 놓을 필요가 없을 것이다. <code class=\"language-text\">const enum</code>을 사용해서 컴파일 결과에 enum의 객체를 남겨 놓지 않을 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">const</span> <span class=\"token keyword\">enum</span> Fruit <span class=\"token punctuation\">{</span>\n  Apple<span class=\"token punctuation\">,</span>\n  Bannana<span class=\"token punctuation\">,</span>\n  Orange<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">const</span> fruit<span class=\"token operator\">:</span> Fruit <span class=\"token operator\">=</span> Fruit<span class=\"token punctuation\">.</span>Apple<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token keyword\">enum</span> Language <span class=\"token punctuation\">{</span>\n  Korean<span class=\"token operator\">:</span> <span class=\"token string\">'ko'</span><span class=\"token punctuation\">,</span>\n  English<span class=\"token operator\">:</span> <span class=\"token string\">'en'</span><span class=\"token punctuation\">,</span>\n  Japanese<span class=\"token operator\">:</span> <span class=\"token string\">'jp'</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">const</span> lang<span class=\"token operator\">:</span> Language <span class=\"token operator\">=</span> Language<span class=\"token punctuation\">.</span>Korean<span class=\"token punctuation\">;</span></code></pre></div>\n<p>이 코드를 컴파일한 결과이다. enum 객체가 노출되지 않고 사용한 값만 노출하고 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token string\">\"use strict\"</span><span class=\"token punctuation\">;</span>\nObject<span class=\"token punctuation\">.</span><span class=\"token function\">defineProperty</span><span class=\"token punctuation\">(</span>exports<span class=\"token punctuation\">,</span> <span class=\"token string\">\"__esModule\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">value</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">var</span> fruit <span class=\"token operator\">=</span> <span class=\"token number\">0</span> <span class=\"token comment\">/* Apple */</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">var</span> lang <span class=\"token operator\">=</span> <span class=\"token string\">\"ko\"</span> <span class=\"token comment\">/* Korean */</span><span class=\"token punctuation\">;</span></code></pre></div>\n<blockquote>\n<h3 id=\"참조-및-출처\" style=\"position:relative;\"><a href=\"#%EC%B0%B8%EC%A1%B0-%EB%B0%8F-%EC%B6%9C%EC%B2%98\" aria-label=\"참조 및 출처 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>참조 및 출처</h3>\n<ul>\n<li><a href=\"https://www.inflearn.com/course/%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0/dashboard\">타입스크립트 시작하기</a></li>\n</ul>\n</blockquote>","frontmatter":{"title":"타입 정의하기 <enum>","date":"September 14, 2020"}}},"pageContext":{"slug":"/TypeScript/타입정의하기_<enum>/","previous":{"fields":{"slug":"/TypeScript/타입스크립트란/"},"frontmatter":{"title":"타입스크립트란","category":"TypeScript","draft":false}},"next":{"fields":{"slug":"/Today I Learned/css_touch-action/"},"frontmatter":{"title":"css touch-action","category":"Today I Learned","draft":false}}}},"staticQueryHashes":["3128451518","96099027"]}